/**
 * 项目基础脚手架
 * @Author: liruilin 1443254530@qq.com
 * @Date: 2025-4-8 14:02:26
 * @LastEditors: liruilin 1443254530@qq.com
 * @FilePath: libs\index.js
 * @Description: 项目基础脚手架
 */

// 项目基础配置
import config from '@/libs/config/evn.js'
// 本地持久缓存封装
import storage from '@/libs/plugins/storage.js'
// 公共方法
import func from '@/libs/utils/index.js'
// 格式验证
import test from '@/libs/utils/test.js'
// 资源地址处理
import url from '@/libs/utils/url.js'
// loading显示，封装原因请看注释
import loading from '@/libs/plugins/showLoading.js'
// 状态管理
import storePlugins from '@/libs/store/index.js'
// 请求处理
import request from '@/libs/common/request.js'
// 一些原型处理
import indexPropto from '@/libs/common/indexPropto.js'
// 路由拦截
import routeInterceptor from '@/libs/common/routeInterceptor.js'
// 页面公共混淆
import pageMixin from '@/libs/mixins/page.js'

/**
 * 统一把操作方法和配置挂载到一个对象上，方便业务使用，统一维护
 */
const $mp = {
    /**
     * 本地持久缓存
     * 示例： uni.$mp.storage.set(key, data, 20000 - 过期时间)  .get(key)  .clear(key)
     */
    storage,
    /**
     * 基础配置
     * 示例： uni.$mp.config.baseUrl
     */
    config,
    /**
     * 公共方法
     * 示例： uni.$mp.func.isNull()
     */
    func,
    /**
     * 公共验证模块
     * 示例： uni.$mp.test.mobile()
     */
    test,
    /**
     * loading控制，解决多次调用会闪烁的问题
     * 示例 uni.$mp.loading.show()  uni.$mp.loading.hide(true - 强制关闭)
     */
    loading,
    /**
     * toast提示
     * 示例： uni.$mp.toast()
     */
    toast: func.toast,
    /**
     * 业务资源地址拼接
     * 示例： uni.$mp.imgurl()
     */
    imgurl: url.imgurl,
    /**
     * 静态资源地址拼接
     * 示例： uni.$mp.assetsurl()
     */
    assetsurl: url.assetsurl,
    /**
     * 文字显示
     * 示例： uni.$mp.txt()
     */
    txt: func.txtShow
}


const install = (Vue, upuiParams = '') => {
    Vue.use(storePlugins.store)
    Vue.use(indexPropto)
    // 同时挂载到uni和Vue.prototype中
    uni.$mp = $mp
    // #ifndef APP-NVUE
    // 因为nvue中全局Vue.prototype和Vue.mixin是无效的，在template中使用需要 nvue 页面引入 ../mixins/nvue.js
    Vue.config.globalProperties.$mp = $mp
    // #endif
    Vue.use(request)
    Vue.use(routeInterceptor)
    Vue.mixin(pageMixin)
}

/**
 * 简洁导出
 * import { $mp } from '@/libs'
 */
export { 
	$mp
}
/**
 * 用于vue脚手架初始化默认导出
 */
export default {
	storePlugins,
	install
}